package main

import (
	"example/gin-swag/docs"
	"net/http"

	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

// @title 示例 API 文档
// @version 1.0
// @description 这是一个使用 gin-swagger 生成的示例 API 文档。
// @termsOfService http://swagger.io/terms/

// @contact.name API 支持
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io

// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html

// @host localhost:8080
// @BasePath /api/v1

// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorization

// 定义一个简单的结构体
type Item struct {
	ID    int     `json:"id"`
	Name  string  `json:"name"`
	Price float64 `json:"price"`
}

// @Summary 获取所有物品
// @Description 获取所有物品的列表
// @Tags items
// @Accept json
// @Produce json
// @Security ApiKeyAuth
// @Success 200 {array} Item
// @Router /items [get]
func getItems(c *gin.Context) {
	// 模拟返回一些物品数据
	items := []Item{
		{ID: 1, Name: "Item 1", Price: 10.99},
		{ID: 2, Name: "Item 2", Price: 20.99},
	}
	c.JSON(200, items)
}

// @Summary 创建一个新物品
// @Description 创建一个新的物品
// @Tags items
// @Accept json
// @Produce json
// @Param item body Item true "物品信息"
// @Security ApiKeyAuth
// @Success 201 {object} Item
// @Router /items [post]
func createItem(c *gin.Context) {
	var newItem Item
	if err := c.ShouldBindJSON(&newItem); err != nil {
		c.JSON(400, gin.H{"error": err.Error()})
		return
	}
	// 这里可以添加保存新物品到数据库的逻辑
	c.JSON(201, newItem)
}

// @BasePath /api/v1

// PingExample godoc
// @Summary ping example
// @Schemes
// @Description do ping
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} Helloworld
// @Router /helloworld [get]
func Helloworld(g *gin.Context) {
	g.JSON(http.StatusOK, "helloworld")
}

func main() {
	r := gin.New()

	docs.SwaggerInfo.BasePath = "/api/v1"

	// 定义 API 路由
	api := r.Group("/api/v1")
	{
		api.GET("/items", getItems)
		api.POST("/items", createItem)
		api.GET("/helloworld", Helloworld)
	}

	// 注册 Swagger UI 路由
	// 访问 http://localhost:8080/swagger/index.html 查看 Swagger UI
	// https://github.com/swaggo/gin-swagger/tree/v1.6.0
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	r.Run(":8080")
}
